www.gusucode.com > VC++ 模仿书本翻页效果的TXT电子书阅读器 > VC++ 模仿书本翻页效果的TXT电子书阅读器/code/TXTReader/Note.cpp
//Download by http://www.NewXing.com // Note.cpp: implementation of the CNote class. // ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "txtreader.h" #include "Note.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CNote::CNote() { m_totalNote = 0; m_NoteList.SetSize(0,NOTE_INIT_AMOUNT); } CNote::~CNote() { UnLoadNotes(); } void CNote::LoadNotes(CString pathname,int start) { if(!m_totalNote) UnLoadNotes(); CFile loadFile; if(!loadFile.Open(pathname,CFile::modeRead | CFile::modeNoTruncate)) { MessageBox(NULL,"读取注释失败!","提示",MB_OK | MB_ICONWARNING); return; } loadFile.Seek(start,CFile::begin); loadFile.Read(&m_totalNote,sizeof(int)); int count = m_totalNote; while(count>0) { NoteNode *pNote = new NoteNode; loadFile.Read(pNote,sizeof(NoteNode)); m_NoteList.Add(pNote); count--; } loadFile.Close(); } void CNote::UnLoadNotes() { for(int i=0;i<m_totalNote;i++) { NoteNode*pNote = (NoteNode*)m_NoteList.GetAt(i); delete pNote; } m_NoteList.RemoveAll(); m_NoteList.SetSize(0,NOTE_INIT_AMOUNT); m_totalNote = 0; } void CNote::SaveNotestoFile(CString pathname,int start) { if(!m_totalNote) return; CFile saveFile; if(!saveFile.Open(pathname,CFile::modeWrite | CFile::modeNoTruncate)) { MessageBox(NULL,"保存注释失败!","提示",MB_OK | MB_ICONWARNING); return; } saveFile.Seek(start,CFile::begin); saveFile.Write(&m_totalNote,sizeof(int)); for(int i=0;i<m_totalNote;i++) { NoteNode*pNote = (NoteNode*)m_NoteList.GetAt(i); saveFile.Write(pNote,sizeof(NoteNode)); } saveFile.Close(); } void CNote::AddNote(NoteNode*pNote) { for(int i=0;i<m_totalNote;i++) { NoteNode*pNoteCur = (NoteNode*)m_NoteList.GetAt(i); if(pNote->page==pNoteCur->page && pNote->line == pNoteCur->line) { delete pNoteCur; m_NoteList.SetAt(i,pNote); return; } } m_NoteList.Add(pNote); m_totalNote++; } bool CNote::RemoveNote(UINT page,UINT line) { for(int i=0;i<m_totalNote;i++) { NoteNode*pNote = (NoteNode*)m_NoteList.GetAt(i); if(pNote->page == page && pNote->line == line) { delete pNote; m_NoteList.RemoveAt(i); m_totalNote--; return true; } } return false; } NoteNode* CNote::GetNote(UINT page,UINT line) { for(int i=0;i<m_totalNote;i++) { NoteNode*pNote = (NoteNode*)m_NoteList.GetAt(i); if(pNote->page == page && pNote->line == line) { return pNote; } } return NULL; } void CNote::ShowTipDlg(NoteNode*pNote) { CNoteDlg dlg; dlg.m_nPage = pNote->page; dlg.m_nLine = pNote->line; dlg.m_pTxt = &(((CTXTReaderDlg*)m_pWnd)->m_txt); dlg.m_strNote = pNote->note; dlg.DoModal(); } void CNote::InitTip(CWnd*pWnd) { m_pWnd = pWnd; }